package org.example.exception;

import org.example.common.result.Result;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice("org.example.controller")
public class GlobalExceptionHandler {
//    @ExceptionHandler(Exception.class)
//    @ResponseBody//返回json
//    public Result error(Exception e){
//        return Result.error();
//    }
//
//    @ExceptionHandler(CustomException.class)
//    @ResponseBody
//    public Result error(CustomException e){
//        return Result.error(e.getCode(),e.getMsg());
//    }

    // 处理通用异常（返回 HTTP 500）
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Result> error(Exception e) {
        Result result = Result.error();
        // 设置 HTTP 状态码为 500（服务器内部错误）
        return new ResponseEntity<>(result, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    // 处理自定义业务异常（根据业务 code 设置 HTTP 状态码）
    @ExceptionHandler(CustomException.class)
    public ResponseEntity<Result> error(CustomException e) {
        Result result = Result.error(e.getCode(), e.getMsg());
        // 根据业务 code 映射 HTTP 状态码（例如：业务 code=500 → HTTP 500）
        HttpStatus status;
        switch (e.getCode()) {
            case "400":
                status = HttpStatus.BAD_REQUEST; // 400：请求参数错误
                break;
            case "401":
                status = HttpStatus.UNAUTHORIZED; // 401：未授权
                System.out.println("捕获到 CustomException，code=" + e.getCode() + "，msg=" + e.getMsg());
                break;
            case "500":
                status = HttpStatus.INTERNAL_SERVER_ERROR; // 500：服务器错误
                break;
            default:
                status = HttpStatus.OK; // 默认 200（可根据需求调整）
                break;
        }
        return new ResponseEntity<>(result, status);
    }
}
